package dp01;

/**
 * 题目： 最佳买卖股票时机含冷冻期
 * 题目链接：https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-with-cooldown/
 */
public class Solution11 {
    public int maxProfit(int[] prices) {
        int n = prices.length;
        int[] dp0 = new int[n];      //当第i天结束后，处于买入期，此时的最大利润
        int[] dp1 = new int[n];      //当第i天结束后，处于可交易期，此时的最大利润
        int[] dp2 = new int[n];      //当第i天结束后，处于冷冻期，此时的最大利润
        dp0[0] = -prices[0];
        for (int i = 1; i < n ; i++) {
            dp0[i] = Math.max(dp0[i-1],dp1[i-1]-prices[i]);
            dp1[i] = Math.max(dp2[i-1],dp1[i-1]);
            dp2[i] = dp0[i-1] + prices[i];
        }
        return Math.max(dp1[n-1],dp2[n-1]);
    }
}
